import axios from 'axios';
import router from '../router';
import { MessageBox, Message } from 'element-ui'
axios.defaults.timeout = 5000*6;  //超时时间30秒
axios.defaults.withCredentials = true;  //允许跨域
//Content-Type 响应头
// axios.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded;charset=UTF-8';
 axios.defaults.headers.post['Content-Type'] = 'application/json;charset=UTF-8';

//基础url
axios.defaults.baseURL = "http://localhost:8889";
// axios.defaults.baseURL = "http://116.62.186.8:38000";



//请求拦截器 加入token
axios.interceptors.request.use(function (config) {
    // 通过拦截request请求,主动为 请求头,追加新属性 Authorization,等于 token 值
     config.headers.token = sessionStorage.getItem('token')
   return config;
   }, function (error) {
     // 对请求错误做些什么
     return Promise.reject(error)
   })

//响应拦截器
axios.interceptors.response.use(

    
    response => {
        //如果reponse里面的status是200，说明访问到接口了，否则错误
        const res = response;
    if (response.status == 200) {

      if (response.data.code == 401) {
        router.push("/login");
      }

      


      if (res.data.msg != null) {
        Message({
          message: res.data.msg,
          type: 'success',
          duration: 5 * 1000
      })
            }
            
            
            return Promise.resolve(response);
        } else {
      
            return Promise.reject(response);
        }
    },
    error => {
        if (error.response.status) {
          switch (error.response.status) {
            // 401: 未登录
            // 未登录则跳转登录页面，并携带当前页面的路径
            // 在登录成功后返回当前页面，这一步需要在登录页操作。
            case 401:
              vant.Toast.fail("身份验证失败，请关闭重新进入。");
              break;
    
            // 403 token过期
            // 登录过期对用户进行提示
            // 清除本地token和清空vuex中token对象
            // 跳转登录页面
            case 403:
              vant.Toast.fail("登录过期，请关闭重新进入。");
              // 清除token
              sessionStorage.removeItem("token");
              
              break;
    
            // 404请求不存在
            case 404:
              vant.Toast.fail("您访问的网页不存在。");
              break;
            // 其他错误，直接抛出错误提示
            default:
              vant.Toast.fail(error.response.data.message);
          }
          return Promise.reject(error.response);
        }
      }
);

/**
 * 封装get方法
 */
export function get(url,params={}){
    return new Promise((resolve,reject) => {
        axios.get(url,{params:params})
        .then(response =>{
            resolve(response.data);
        })
        .catch(err =>{
            reject(err);
        })
    });
}

/**
 * 封装post方法
 */
export function post(url,data={}){
    return new Promise((resolve,reject) => {
        axios.post(url,data)
        .then(response =>{
            resolve(response.data);
        })
        .catch(err =>{
            
            reject(err);
        })
    });
}






/**
 * 封装带文件post方法
 */
 export function filepost(url,data={}){
  return new Promise((resolve,reject) => {
    axios.post(url, data, {
      headers: {
        "Content-Type": "multipart/form-data"
      }})
      .then(response =>{
          resolve(response.data);
      })
      .catch(err =>{
          
          reject(err);
      })
  });
}

